package data;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;

import domain.DependienteRepository;
import util.DependienteDTO;
import util.DependienteAssembler;
import domain.Dependiente;

public class DependienteRepositoryDAOImpl implements DependienteRepository {
 
 private DependienteDAO dao;
 
 /** 
   * Constructor  
   * @version 1, 5/10/2014
   * @param objeto DAO con todas las funciones necesarias IMEC para ser ejecutadas en la base de datos.
   */
 DependienteRepositoryDAOImpl(DependienteDAO dao) {
   this.dao = dao;
 }
 
 /** 
   * 
   * Implementacion del metodo insert de la interfaz, esta
   * sera ejecutada en la base de datos mediante el objeto DAO.     
   * @version 1, 5/10/2014
   * @param object Objeto de tipo banda con la información necesaria para crear el DTO.
   * @return true de completarse la operacion.
   */
 public boolean insert(Dependiente obj) {
   DependienteDTO dto = DependienteAssembler.createDTO(obj);
   return (dao.insert(dto));
 }
 
 /** 
   * 
   * Implementacion del metodo delete de la interfaz, esta
   * sera ejecutada en la base de datos mediante el objeto DAO.     
   * @version 1, 5/10/2014
   * @param object Objeto de tipo banda 
   * @return true de completarse la operacion.
   */
 public boolean delete(Dependiente obj) {
   DependienteDTO dto = DependienteAssembler.createDTO(obj);
   return (dao.delete(dto));
 }
 
 /** 
   * 
   * Implementacion del metodo find de la interfaz, esta
   * sera ejecutada en la base de datos mediante el objeto DAO.     
   * @version 1, 5/10/2014
   * @param id del objeto que se busca 
   * @return objeto con la informacion recuperada de la base de datos.
   */
 public Dependiente find(int id) {
   DependienteDTO dto = dao.getById(id);
   if (dto!=null) {
     Dependiente obj = new Dependiente();
     System.out.println(dto.getNombre());
     DependienteAssembler.update(obj,dto);
     return obj;
   }
   return null;
 }
 
 /** 
   * 
   * Implementacion del metodo update de la interfaz, esta
   * sera ejecutada en la base de datos mediante el objeto DAO.     
   * @version 1, 5/10/2014
   * @param objeto con la informacion que sera actualizada. 
   * @return verdadero de ejecutarse la accion correctamente.
   */
 public boolean update(Dependiente obj) {
   DependienteDTO dto = DependienteAssembler.createDTO(obj);
   return (dao.update(dto));
 }
 
 /** 
   * 
   * Implementacion del metodo findAll de la interfaz, esta
   * sera ejecutada en la base de datos mediante el objeto DAO.     
   * @version 1, 5/10/2014   
   * @return un objeto Collection con todos los datos de la tabla.
   */
 public Collection findAll() {
   Collection dtos = dao.findAll();
   List objList = new ArrayList();
   Iterator itr = dtos.iterator();
   while (itr.hasNext()) {
     Dependiente obj = new Dependiente();
     DependienteDTO dto = (DependienteDTO)itr.next();
     DependienteAssembler.update(obj,dto);
     objList.add(obj);
   }
   return objList;
 }
}